package com.service.impl;

import com.bean.Book;
import com.mapper.BookMapper;
import com.service.BookService;
import com.utils.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper bookMapper;

    @Override
    public Book getBookById(Integer id) {
        // 调用 Mapper 层的方法根据书籍 id 查询书籍信息
        return bookMapper.getBookById(id);
    }

    @Override
    public PageInfo<Book> getBooksByKeyword(String keyword, int pageNum, int pageSize) {
        // 计算分页查询的偏移量
        int offset = (pageNum - 1) * pageSize;
        // 调用 Mapper 层的方法进行分页模糊查询
        List<Book> bookList = bookMapper.getBooksByKeyword(keyword, offset, pageSize);
        // 调用 Mapper 层的方法统计符合条件的书籍数量
        int total = bookMapper.countBooksByKeyword(keyword);
        // 创建分页信息对象
        return new PageInfo<>(pageNum, pageSize, total, bookList);
    }

    @Override
    public PageInfo<Book> getBooksByCategoryId(Integer categoryId, int pageNum, int pageSize) {
        // 计算分页查询的偏移量
        int offset = (pageNum - 1) * pageSize;
        // 调用 Mapper 层的方法根据类别 ID 进行分页查询
        List<Book> bookList = bookMapper.getBooksByCategoryId(categoryId, offset, pageSize);
        // 调用 Mapper 层的方法统计该类别下的书籍数量
        int total = bookMapper.countBooksByCategoryId(categoryId);
        // 创建分页信息对象
        return new PageInfo<>(pageNum, pageSize, total, bookList);
    }

    @Override
    public boolean insertBook(Book book) {
        // 调用 Mapper 层的方法插入书籍信息，根据返回的影响行数判断是否插入成功
        int result = bookMapper.insertBook(book);
        return result > 0;
    }

    @Override
    public boolean updateBook(Book book) {
        // 调用 Mapper 层的方法更新书籍信息，根据返回的影响行数判断是否更新成功
        int result = bookMapper.updateBook(book);
        return result > 0;
    }

    @Override
    public boolean deleteBookById(Integer id) {
        // 调用 Mapper 层的方法删除书籍信息，根据返回的影响行数判断是否删除成功
        int result = bookMapper.deleteBookById(id);
        return result > 0;
    }
}